package com.heiye.auth.factory;

import com.heiye.auth.enums.LoginTypeEnum;
import com.heiye.auth.strategy.LoginStrategy;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * @author: heiye
 * @date: 2025/02/23 下午7:51
 * @version: v1.0.0
 * @description: 登录策略工厂
 */
@Component
@Slf4j
//  Lombok 库中的一个注解，用于自动生成一个包含所有 final 字段或带有 @NonNull 注解的字段的构造函数。
@RequiredArgsConstructor
public class LoginStrategyFactory {
    /**
     * 当 Spring 容器中存在多个 LoginStrategy 接口的实现类时
     * Spring 会自动将 Bean 名称作为 key，实现类实例作为 value，组装成一个 Map<String, LoginStrategy>。
     */
    private final Map<String, LoginStrategy> loginStrategyMap;

    public LoginStrategy getLoginStrategy(LoginTypeEnum loginTypeEnum) {
        String key = String.format("%s%s", loginTypeEnum.name().toLowerCase(), "LoginStrategy");
        return loginStrategyMap.get(key);
    }
}
